import multiprocessing
import os
import time

"""
多进程的设计:
    进程控制

    terminate(self):关闭进程
    is_alive(self):是否存活
    join(self,timeout):加入队列强制执行
    p.is_alive(): 判断子线程p1是否存活
    p.terminate(): 强制结束
    p.Process(daemon=true): 守护进程,主线程开启同时他也开启,主线程结束他也结束
    pid = os.fork() # 创建子进程 只支持linux  windows会报错:Has no attribute fork  
    {pid<0创建失败,pid=0子进程获取数据,pid>0父进程获取数据 }
    

    # join()
    所有的进程通过start()方法启动,而后多个进程进入到阻塞队列,这时候某一个进程是不可能强占cpu的
    如果这个时候有一个进程必须要现在执行,那就要使用join()


"""


# 发送方法
def send(msg):
    print("[pid:]{}  [name:]{}".format(
        multiprocessing.current_process().pid,
        multiprocessing.current_process().name,
    ))



    print('sending......')
    time.sleep(5)
    print('发送成功')  # 主进程要等子进程执行完再结束



def main():
    p = multiprocessing.Process(target=send, args=('hello world',), name='发送进程')
    p.start()
    #
    pid = os.fork()
    print('子进程id:{}'.format(pid))
    if pid<0:
        print('子进程创建失败')
    elif pid==0:
        print(os.getpid())
        print("父进程id:%s" % os.getppid())
    else:
        print("父进程执行 pid[%s]" % os.getppid())
if __name__ == '__main__':
    main()
